const jwt = require('jsonwebtoken');
const userDB = require('../db/user');
const { jwtConfig } = require('../config/config');

module.exports = async (req, res, next) => {
    try {
        console.log('=== 认证中间件开始 ===');
        console.log('请求路径:', req.path);
        console.log('请求方法:', req.method);
        console.log('Authorization头:', req.headers.authorization);
        
        // 从请求头获取token
        const token = req.headers.authorization?.split(' ')[1];
        if (!token) {
            console.log('未提供认证令牌');
            return res.status(401).json({ error: '未提供认证令牌' });
        }

        console.log('获取到token:', token.substring(0, 50) + '...');
        console.log('JWT密钥:', jwtConfig.secret);

        // 验证token
        const decoded = jwt.verify(token, jwtConfig.secret);
        console.log('Token解码成功:', decoded);
        
        // 检查用户是否存在
        const user = await userDB.getUserById(decoded.userId);
        console.log('查询用户结果:', user ? '用户存在' : '用户不存在');
        
        if (!user) {
            console.log('用户不存在，用户ID:', decoded.userId);
            return res.status(401).json({ error: '用户不存在' });
        }

        // 将用户信息添加到请求对象
        req.user = {
            id: user.user_id,
            username: user.nickname || user.phone
        };
        
        console.log('认证成功，用户信息:', req.user);
        console.log('=== 认证中间件结束 ===');

        next();
    } catch (error) {
        console.error('=== 认证失败 ===');
        console.error('错误类型:', error.name);
        console.error('错误信息:', error.message);
        
        if (error.name === 'JsonWebTokenError') {
            return res.status(401).json({ error: '无效的认证令牌' });
        }
        if (error.name === 'TokenExpiredError') {
            return res.status(401).json({ error: '认证令牌已过期' });
        }
        console.error('认证失败:', error);
        res.status(500).json({ error: '认证失败' });
    }
}; 